#pragma once
#pragma warning (disable: 4201)
#pragma warning (disable: 4100)
#pragma warning (disable: 4996)
#pragma warning (disable: 4189)
#include <Windows.h>
#include "profiler.h"

#define _LOGIC_DEBUG
#define VK_0 0x30
#define VK_1 0x31
#define VK_2 0x32
#define VK_3 0x33
#define VK_4 0x34
#define VK_5 0x35
#define VK_6 0x36
#define VK_7 0x37
#define VK_8 0x38
#define VK_9 0x39
#define VK_A 0x41
#define VK_B 0x42
#define VK_C 0x43
#define VK_D 0x44
#define VK_E 0x45
#define VK_F 0x46
#define VK_G 0x47
#define VK_H 0x48
#define VK_I 0x49
#define VK_J 0x4A
#define VK_K 0x4B
#define VK_L 0x4C
#define VK_M 0x4D
#define VK_N 0x4E
#define VK_O 0x4F
#define VK_P 0x50
#define VK_Q 0x51
#define VK_R 0x52
#define VK_S 0x53
#define VK_T 0x54
#define VK_U 0x55
#define VK_V 0x56
#define VK_W 0x57
#define VK_X 0x58
#define VK_Y 0x59
#define VK_Z 0x5A

// MESSAGE EVENTs
#define MSG_CREATE		1	//message for creating
#define MSG_MOVE		2	//message for moving
#define MSG_UPDATE		4	//message for updating
#define MSG_KB			8	//message for controlling by keyboard
#define MSG_COLLISION	16	//message for solving collisions
#define MSG_CHNGLVL		32	//message for starting another level
#define MSG_DEATH		64	//message for dying object
#define MSG_BOMB		128 //message for bombing all AI Panzers

// MAP IDENTIFIERs
#define MAP_WATER		1
#define MAP_ICE			2
#define MAP_GRASS		4
#define MAP_BRICK		8
#define MAP_CONC		16
#define MAP_STAFF		32

// GAME OBJECT GROUP IDs
#define GID_USERPANZER	0	//GroupID of tank controlled by Player
#define GID_AIPANZER	1	//GroupID of tank controlled by AI
#define GID_USERBULLET	2	//GroupID of bullet shot by players tank
#define GID_AIBULLET	3	//GroupID of bullet shot by AI tank
#define GID_STAFF		4	//GroupID of players staff
#define GID_WALL		5	//GroupID of any wall

// BONUS TYPEs (it is GIDs too)
#define B_TYPE_STAR		6	//upgrade for players tank
#define B_TYPE_GUN		7	//full upgrade for players tank
#define B_TYPE_PANZER	8	//adds 1 life for players
#define B_TYPE_BOMB		9	//explodes all AI tanks in the game
#define B_TYPE_CLOCK	10	//pauses all AI tanks in the game
#define B_TYPE_HELMET	11	//gives invulnerability for players tank
#define B_TYPE_SPADE	12	//creates concrete around players staff

// TANK TYPEs
#define P_TYPE_U_N		0	//usual players tank
#define P_TYPE_U_UP1	1	//first upgrade of players tank (more speed of bullets)
#define P_TYPE_U_UP2	2	//second upgrade of players tank (more HP, less cooldown, more bullet damage)
#define P_TYPE_U_UP3	3	//third upgrade of players tank (even more HP, even more bullet damage, bullets can crash a concrete)
#define P_TYPE_AI_1		4	//AI tank 1 (1 HP, normal speed)
#define P_TYPE_AI_2		5	//AI tank 2 (1 HP, fast speed)
#define P_TYPE_AI_3		6	//AI tank 3 (1 HP, normal speed, fast bullet speed)
#define P_TYPE_AI_4		7	//AI tank 4 (4 HP, slow speed, bullets can crash a concrete)

// DIRECTIONs
const float MOVE_UP = 0.0f/180.0f*3.141592f;
const float MOVE_LEFT = 90.0f/180.0f*3.141592f;
const float MOVE_DOWN = 180.0f/180.0f*3.141592f;
const float MOVE_RIGHT = 270.0f/180.0f*3.141592f;

#define MAP_SIZE_X 24
#define MAP_SIZE_Y 24

//extern int C_MP_SIZE_X = 24;
//extern int C_MP_SIZE_Y = 24;


// UPDATING TIME
#define UPDATE_TIME		40000	//micro secs for timers

//EXPLOSION LONG
#define EXP_LONG 2000000

//SPAWNS
#define SPAWN_P_X 0
#define SPAWN_P_Y MAP_SIZE_Y/2-3
#define SPAWN_AI1_X MAP_SIZE_X-1
#define SPAWN_AI1_Y 0
#define SPAWN_AI2_X MAP_SIZE_X-1
#define SPAWN_AI2_Y MAP_SIZE_Y/2-1
#define SPAWN_AI3_X MAP_SIZE_X-1
#define SPAWN_AI3_Y MAP_SIZE_Y-1

// SOME GLOBAL VARIABLEs
extern bool BonusClock;